package com.hhc.controller;

import com.hhc.dto.*;
import com.hhc.service.PermissionService;
import com.hhc.utils.RestResult;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

import org.springframework.web.bind.annotation.*;

/**
 * 权限管理控制器，提供角色和权限相关操作接口
 *
 * @author pc
 */
@RestController
@RequestMapping("/permission")
@RequiredArgsConstructor
public class PermissionController {

    private final PermissionService permissionService;

    /**
     * 新增角色接口
     *
     * @param request 添加角色请求参数
     * @return RestResult 响应结果
     */
    @PostMapping("/add-role")
    public RestResult<?> addRole(@RequestBody @Valid AddRoleRequest request) {
        boolean success = permissionService.addRole(request);
        if (!success) {
            return RestResult.failure("角色名称已存在");
        }
        return RestResult.success("添加角色成功");
    }

    /**
     * 分配用户角色接口
     *
     * @param request 分配用户角色请求参数
     * @return RestResult 响应结果
     */
    @PostMapping("/assign-user-role")
    public RestResult<?> assignUserRole(@RequestBody @Valid AssignUserRoleRequest request) {
        boolean success = permissionService.assignUserRole(request);
        if (!success) {
            return RestResult.failure("分配失败，可能是用户或角色不存在");
        }
        return RestResult.success("分配角色成功");
    }

    /**
     * 新增权限接口
     *
     * @param request 添加权限请求参数
     * @return RestResult 响应结果
     */
    @PostMapping("/add-permission")
    public RestResult<?> addPermission(@RequestBody @Valid AddPermissionRequest request) {
        boolean success = permissionService.addPermission(request);
        if (!success) {
            return RestResult.failure("权限名称已存在");
        }
        return RestResult.success("添加权限成功");
    }

    /**
     * 分配角色权限接口
     *
     * @param request 分配角色权限请求参数
     * @return RestResult 响应结果
     */
    @PostMapping("/assign-role-permission")
    public RestResult<?> assignRolePermission(@RequestBody @Valid AssignRolePermissionRequest request) {
        boolean success = permissionService.assignRolePermission(request);
        if (!success) {
            return RestResult.failure("分配失败，可能是角色或权限不存在");
        }
        return RestResult.success("分配权限成功");
    }
    /**
     * 获取用户权限信息
     * @param userId 用户ID
     * @return 用户权限信息
     */
    @GetMapping("/user/{userId}")
    public RestResult<UserPermissionInfo> getUserPermissions(@PathVariable Long userId) {

        return RestResult.success();
    }

    /**
     * 获取当前登录用户权限信息
     * @return 当前用户权限信息
     */
    @GetMapping("/current")
    public RestResult<UserPermissionInfo> getCurrentUserPermissions() {

        return RestResult.success();
    }

}